The QuickTime VR Manager allows you to define a prescreen buffer imaging completion procedure that is called whenever QuickTime VR finishes drawing a panorama image in the prescreen buffer. Typically, your completion procedure adds graphical elements to the image before the buffer is copied to the screen. For instance, a flight simulator could overlay a heads-up display containing information about the aircraft (its altitude, velocity, and so forth).
You install a prescreen buffer imaging completion procedure by passing its address to the QTVRSetPrescreenImagingCompleteProc function:
theErr = QTVRSetPrescreenImagingCompleteProc(theInstance,
NewQTVRImagingCompleteProc(MyImagingCompleteProc),
(SInt32)&theData, 0);
Listing 2-10 defines a simple completion routine that overlays a picture onto the screen image.
Listing 10 Overlaying images in the prescreen buffer
pascal OSErr MyImagingCompleteProc (QTVRInstance, MyDataPtr theDataPtr)
{
if (theDataPtr->hasLogoPict) {
GWorldPtr theOffscreenGWorld;
GDHandle theGD;
Rect gwRect;
Rect picRect;
// The current graphics world is set to the prescreen buffer.
GetGWorld (&theOffscreenGWorld, &theGD);
gwRect = (*(theOffscreenGWorld->portPixMap))->bounds;
picRect = (*(theDataPtr->logoPict))->picFrame;
OffsetRect (&picRect, -picRect.left, -picRect.top);
OffsetRect (&picRect, gwRect.right - (picRect.right + 8),
gwRect.bottom - (picRect.bottom + 8));
// Draw logo in lower right corner
DrawPicture (theDataPtr->logoPict, &picRect);
}
return noErr;
}
On entry to the prescreen buffer imaging completion routine, the current graphics world is set to QuickTime VR's prescreen buffer. The MyImagingCompleteProc function defined in Listing 2-10 retrieves the dimensions of that buffer and then draws a picture in the lower-right corner of that buffer.
| Previous | Chapter Contents | Chapter Top | Next |